{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#导入必要的模块\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import accuracy_score\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35        0  33.6   \n",
       "1            1       85             66             29        0  26.6   \n",
       "2            8      183             64              0        0  23.3   \n",
       "3            1       89             66             23       94  28.1   \n",
       "4            0      137             40             35      168  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#读取数据\n",
    "data=pd.read_csv(\"diabetes.csv\")\n",
    "#显示数据的前五行信息\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 9 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null int64\n",
      "BloodPressure               768 non-null int64\n",
      "SkinThickness               768 non-null int64\n",
      "Insulin                     768 non-null int64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "Outcome                     768 non-null int64\n",
      "dtypes: float64(2), int64(7)\n",
      "memory usage: 54.1 KB\n"
     ]
    }
   ],
   "source": [
    "#显示数据的基本信息，是否有空值，数据所属类型\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于数据中的缺失值用零值表示，所以该命令查找不出缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.845052</td>\n",
       "      <td>120.894531</td>\n",
       "      <td>69.105469</td>\n",
       "      <td>20.536458</td>\n",
       "      <td>79.799479</td>\n",
       "      <td>31.992578</td>\n",
       "      <td>0.471876</td>\n",
       "      <td>33.240885</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.369578</td>\n",
       "      <td>31.972618</td>\n",
       "      <td>19.355807</td>\n",
       "      <td>15.952218</td>\n",
       "      <td>115.244002</td>\n",
       "      <td>7.884160</td>\n",
       "      <td>0.331329</td>\n",
       "      <td>11.760232</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.078000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>27.300000</td>\n",
       "      <td>0.243750</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>117.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>30.500000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0.372500</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>140.250000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>127.250000</td>\n",
       "      <td>36.600000</td>\n",
       "      <td>0.626250</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>199.000000</td>\n",
       "      <td>122.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>846.000000</td>\n",
       "      <td>67.100000</td>\n",
       "      <td>2.420000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin  \\\n",
       "count   768.000000  768.000000     768.000000     768.000000  768.000000   \n",
       "mean      3.845052  120.894531      69.105469      20.536458   79.799479   \n",
       "std       3.369578   31.972618      19.355807      15.952218  115.244002   \n",
       "min       0.000000    0.000000       0.000000       0.000000    0.000000   \n",
       "25%       1.000000   99.000000      62.000000       0.000000    0.000000   \n",
       "50%       3.000000  117.000000      72.000000      23.000000   30.500000   \n",
       "75%       6.000000  140.250000      80.000000      32.000000  127.250000   \n",
       "max      17.000000  199.000000     122.000000      99.000000  846.000000   \n",
       "\n",
       "              BMI  DiabetesPedigreeFunction         Age     Outcome  \n",
       "count  768.000000                768.000000  768.000000  768.000000  \n",
       "mean    31.992578                  0.471876   33.240885    0.348958  \n",
       "std      7.884160                  0.331329   11.760232    0.476951  \n",
       "min      0.000000                  0.078000   21.000000    0.000000  \n",
       "25%     27.300000                  0.243750   24.000000    0.000000  \n",
       "50%     32.000000                  0.372500   29.000000    0.000000  \n",
       "75%     36.600000                  0.626250   41.000000    1.000000  \n",
       "max     67.100000                  2.420000   81.000000    1.000000  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看各属性的统计特性\n",
    "data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Number of occurrences')"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc553ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#查看目标值的分布，以及各类样本分布是否均衡\n",
    "sns.countplot(data.Outcome)\n",
    "pyplot.xlabel(\"Outcome\")\n",
    "pyplot.ylabel(\"Number of occurrences\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "两类的样本比例大约在2:1左右，后续的模型训练中直接使用默认的class_weight，不对其权重进行调整"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#分离出模型的输入特征与输出特征\n",
    "y_train=data['Outcome']\n",
    "X_train=data.drop(['Outcome'],axis=1)\n",
    "X_train=np.array(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#对缺失值作插值处理，对输入特征中为零值的样本填入该特征的众数\n",
    "from sklearn.preprocessing import Imputer\n",
    "imputer=Imputer(missing_values=0,strategy=\"most_frequent\",axis=0,copy=False)\n",
    "X_train=imputer.fit_transform(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#对特征进行标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "ss=StandardScaler()\n",
    "X_train=ss.fit_transform(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#按作业要求，将20%的数据作为测试集\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train,X_val,y_train,y_val=train_test_split(X_train,y_train,test_size=0.2,random_state=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性SVM模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "线性SVM模型，既可以用LinearSVC，也可以用将参数\"kernel\"设为\"linear\"的SVC来实现，此处选择LinearSVC来建模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "#利用模型LinearSVC训练经过预处理的数据\n",
    "from sklearn.svm import LinearSVC\n",
    "SVC1=LinearSVC().fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifer LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.84      0.91      0.87       107\n",
      "          1       0.74      0.60      0.66        47\n",
      "\n",
      "avg / total       0.81      0.81      0.81       154\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[97 10]\n",
      " [19 28]]\n"
     ]
    }
   ],
   "source": [
    "#在校验集上测试，估计模型性能\n",
    "from sklearn import metrics\n",
    "y_predict=SVC1.predict(X_val)\n",
    "print(\"Classification report for classifer %s:\\n%s\\n\" %(SVC1,metrics.classification_report(y_val,y_predict)))\n",
    "print(\"Confusion matrix:\\n%s\" % metrics.confusion_matrix(y_val,y_predict))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从测试集上得出的precision, recall, f1-score, support数据可知，在对y=0的预测上，模型的精度与召回率较为理想，但对y=1的预测上，精度与召回率不高。混淆矩阵也说明了这一点，分别有19个FN，10个FP值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#定义一个函数，将调优参数与数据作为参数，训练不同调优参数下的模型并返回对应模型下的accuracy指标\n",
    "def fit_grid_point_Linear(C,X_train,y_train,X_val,y_val):\n",
    "    # 利用SVC训练训练集中的数据\n",
    "    SVC2=LinearSVC(C=C)\n",
    "    SVC2=SVC2.fit(X_train,y_train)\n",
    "    # 在校验集上返回训练后模型的accuracy指标\n",
    "    accuracy=SVC2.score(X_val,y_val)\n",
    "    print(\"accuracy:{}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy:0.7987012987012987\n",
      "accuracy:0.8116883116883117\n",
      "accuracy:0.8116883116883117\n",
      "accuracy:0.8116883116883117\n",
      "accuracy:0.8116883116883117\n",
      "accuracy:0.7597402597402597\n",
      "accuracy:0.6818181818181818\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'accuracy')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nZTkszMysrP8DwKI7iWKVJoIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc450b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#给出需要调优参数的集合\n",
    "Cs=np.logspace(-3,3,7)\n",
    "accuracy_s=[]\n",
    "#将调优参数集合进行循环，得到不同参数的模型与对应的模型accuracy指标\n",
    "for i, oneC in enumerate(Cs):\n",
    "    tmp=fit_grid_point_Linear(oneC,X_train,y_train,X_val,y_val)\n",
    "    accuracy_s.append(tmp)\n",
    "x_axis=np.log10(Cs)\n",
    "pyplot.plot(x_axis,np.array(accuracy_s),'r-')\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从图看出，在选定的集合范围内，随错误项的正则参数C的增大，模型性能先提升后至一稳定平台后下降，该线性SVM模型选取了缺省的L2正则。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### kernel为RBF的SVM正则参数调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#定义一个函数，将调优参数与数据作为参数，训练不同调优参数下的模型并返回对应模型下的accuracy指标\n",
    "#导入SVC模块\n",
    "from sklearn.svm import SVC\n",
    "def fit_grid_point_RBF(C,gamma,X_train,y_train,X_val,y_val):\n",
    "    SVC3=SVC(C=C,kernel='rbf',gamma=gamma)\n",
    "    SVC3.fit(X_train,y_train)\n",
    "    accuracy=SVC3.score(X_val,y_val)\n",
    "    print(\"accuracy:{}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.7012987012987013\n",
      "accuracy:0.7987012987012987\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.8051948051948052\n",
      "accuracy:0.7792207792207793\n",
      "accuracy:0.7467532467532467\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.7857142857142857\n",
      "accuracy:0.7792207792207793\n",
      "accuracy:0.7077922077922078\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.7792207792207793\n",
      "accuracy:0.7597402597402597\n",
      "accuracy:0.7207792207792207\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n"
     ]
    }
   ],
   "source": [
    "C_s=np.logspace(-2,2,5)\n",
    "gamma_s = np.logspace(-2,2,5)\n",
    "accuracy_s=[]\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_val, y_val)\n",
    "        accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上述运行的结果来看，C与gamma的取值范围应该是合适的，下面扩大C与gamma的取值空间，来试验下模型的性能是否能得到提升"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.7012987012987013\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.7272727272727273\n",
      "accuracy:0.8051948051948052\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.7337662337662337\n",
      "accuracy:0.8116883116883117\n",
      "accuracy:0.7857142857142857\n",
      "accuracy:0.6948051948051948\n",
      "accuracy:0.7337662337662337\n",
      "accuracy:0.8116883116883117\n",
      "accuracy:0.8051948051948052\n",
      "accuracy:0.7792207792207793\n",
      "accuracy:0.7337662337662337\n",
      "accuracy:0.8116883116883117\n",
      "accuracy:0.8051948051948052\n",
      "accuracy:0.7792207792207793\n",
      "accuracy:0.7792207792207793\n",
      "accuracy:0.8051948051948052\n",
      "accuracy:0.8051948051948052\n",
      "accuracy:0.8116883116883117\n",
      "accuracy:0.7792207792207793\n",
      "accuracy:0.7597402597402597\n",
      "accuracy:0.8051948051948052\n",
      "accuracy:0.8051948051948052\n",
      "accuracy:0.7792207792207793\n",
      "accuracy:0.7857142857142857\n",
      "accuracy:0.7662337662337663\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数，将C与gamma的取值范围扩大，试验模型能力是否能得到提升\n",
    "C_s = np.logspace(-3, 5, 9)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-6, -2, 5)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_val, y_val)\n",
    "        accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将该运行结果与之前的结果对比可知，上一个C与gamma的取值已经基本处于合理区间了，下面利用图示来直观对比C与gamma的不同取值对模型性能变化的影响"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc8ad4e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#将模型性能在上述的C，gamma范围内的变化利用图形表示出来\n",
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend(loc=\"lower right\")\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('RBF_SVM_Otto.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "从图形中的不同gamma曲线与不同log(C)的组合可知，gamma取值较小对模型有利，模型在不同gamma取值时的性能与log(C)有关"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
